#pragma once

class CWinSystem: public Ogitors::OgitorsSystem
{
private:
	Overlay *mLoadOverlay;
	OverlayElement* mLoadingBarElement;
	RenderWindow  *pWindow;

public:
  CWinSystem(RenderWindow* window);
  virtual ~CWinSystem();

  virtual void DeleteFile(const Ogre::String &filename) {};
  virtual void RenameFile(const Ogre::String &oldname, const Ogre::String &newname) {};
  virtual bool CopyFilesEx(Ogre::String source, Ogre::String destination) {return false;};
  virtual bool MakeDirectory(Ogre::String dirname) {return false;};
  virtual Ogre::String GetExePath();
  virtual Ogre::String getProjectsDirectory();
  virtual void GetFileList(Ogre::String path, Ogre::StringVector &list);
  virtual Ogre::String DisplayOpenDialog(Ogre::UTFString title, Ogitors::UTFStringVector ExtensionList) {return "";};
  virtual Ogre::String DisplaySaveDialog(Ogre::UTFString title, Ogitors::UTFStringVector ExtensionList) {return "";};
  virtual Ogitors::DIALOGRET    DisplayMessageDialog(Ogre::UTFString msg, Ogitors::DIALOGTYPE dlgType) {return Ogitors::DLGRET_CANCEL;};
  virtual bool         DisplayTerrainDialog(Ogre::NameValuePairList &params) {return false;};
  virtual bool         DisplayImportHeightMapDialog(Ogre::NameValuePairList &params) {return false;};
  virtual void         UpdateLoadProgress(float percentage, Ogre::UTFString msg) ;

  virtual void         UnLoadPropertySheets() {};
  virtual void         LoadPropertySheet(int idx, Ogre::String filename) {};
  virtual bool         HasTreeView() {return false;};
  virtual bool         HasPropertiesView() {return false;};
  virtual bool         ClearPropertiesView(unsigned int ID) {return false;};
  virtual void         PresentPropertiesView() {};
  virtual void         SelectTreeItem(void *handle) {};
  virtual void *       InsertTreeItem(Ogre::String parent,Ogre::String name,int iconid, unsigned int colour) {return 0;};
  virtual void *       InsertTreeItem(void *parent,Ogre::String name,int iconid, unsigned int colour) {return 0;};
  virtual void *       CreateTreeRoot(Ogre::String name) {return 0;};
  virtual void         SetTreeItemText(Ogre::String oldname, Ogre::String newname) {};
  virtual void         SetTreeItemColour(Ogre::String name, unsigned int colour ) {};
  virtual void         DeleteTreeItem(Ogre::String name) {};
  virtual void         ClearTreeItems() {};

  virtual void	       ClearProperty(void *caller, int idx) {};
  virtual void         EnableProperty(void *caller, int idx, bool enable) {};
  virtual Ogre::String GetStringProperty(void *caller, int idx) {return "";};
  virtual int          GetIntProperty(void *caller, int idx) {return 0;};
  virtual float        GetFloatProperty(void *caller, int idx) {return 0.0f;};
  virtual bool         GetBoolProperty(void *caller, int idx) {return false;};
  virtual Ogre::ColourValue GetColourProperty(void *caller, int idx) {return Ogre::ColourValue(0,0,0);};
  virtual bool         SetProperty(void *caller, int idx,Ogre::String value) {return false;};
  virtual bool         SetProperty(void *caller, int idx,int value) {return false;};
  virtual bool         SetProperty(void *caller, int idx,float value) {return false;};
  virtual bool         SetProperty(void *caller, int idx,bool value) {return false;};
  virtual bool         SetProperty(void *caller,int idx,Ogre::Vector2 value) {return false;};
  virtual bool         SetProperty(void *caller,int idx,Ogre::Vector3 value) {return false;};
  virtual bool         SetProperty(void *caller,int idx,Ogre::Vector4 value) {return false;};
  virtual bool         SetProperty(void *caller,int idx,Ogre::Quaternion value) {return false;};
  virtual bool         SetColourProperty(void *caller, int idx,Ogre::ColourValue value) {return false;};
  virtual void         FillPropertyOptions(void *caller, int idx, Ogre::StringVector &optlist) {};
  virtual void         CreateGroupProperty(void *caller,int idxparent, int idxnew, const Ogre::String& namenew) {};
  virtual void         CreateStringProperty(void *caller,int idxparent, int idxnew, const Ogre::String& namenew, const Ogre::String& value) {};
  virtual void         CreateEnumProperty(void *caller,int idxparent, int idxnew, const Ogre::String& namenew, const Ogre::StringVector& list) {};
  virtual void         CreateIntProperty(void *caller,int idxparent, int idxnew, const Ogre::String& namenew, int value) {};
  virtual void         CreateFloatProperty(void *caller,int idxparent, int idxnew, const Ogre::String& namenew, float value) {};
  virtual void         CreateBoolProperty(void *caller,int idxparent, int idxnew, const Ogre::String& namenew, bool value) {};
  virtual void         CreateColourProperty(void *caller,int idxparent, int idxnew, const Ogre::String& namenew, const Ogre::ColourValue& value) {};
  virtual void         CreateQuaternionProperty(void *caller,int idxparent, int idxnew, const Ogre::String& namenew, const Ogre::Quaternion& value) {};
  virtual void         CreateVector2Property(void *caller,int idxparent, int idxnew, const Ogre::String& namenew, const Ogre::Vector2& value, const Ogre::String& fx = "X", const Ogre::String& fy = "Y") {};
  virtual void         CreateVector3Property(void *caller,int idxparent, int idxnew, const Ogre::String& namenew, const Ogre::Vector3& value, const Ogre::String& fx = "X", const Ogre::String& fy = "Y", const Ogre::String& fz = "Z") {};
  virtual void         CreateVector4Property(void *caller,int idxparent, int idxnew, const Ogre::String& namenew, const Ogre::Vector4& value, const Ogre::String& fx = "X", const Ogre::String& fy = "Y", const Ogre::String& fz = "Z", const Ogre::String& fw = "W") {};
  virtual void         ExpandProperty(void *caller, int idx, bool expand) {};
};
